package br.com.sgac.controler;

import java.io.IOException;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.sgac.dao.AgendaDAO;
import br.com.sgac.dao.ConsultaDAO;
import br.com.sgac.dao.MedicamentoDAO;
import br.com.sgac.dao.MedicoDAO;
import br.com.sgac.dao.PacienteDAO;
import br.com.sgac.model.Agenda;
import br.com.sgac.model.Consulta;
import br.com.sgac.model.Medicamento;
import br.com.sgac.model.Medico;
import br.com.sgac.model.Paciente;
import br.com.sgac.model.Receituario;

/**
 * Servlet implementation class AgendaServlet
 */
@WebServlet("/AgendaServlet")
public class AgendaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	SimpleDateFormat formatador = new SimpleDateFormat("dd/mm/yyyy");
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AgendaServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PacienteDAO pacienteDAO = new PacienteDAO();
		MedicoDAO medicoDAO = new MedicoDAO();
		AgendaDAO agendaDAO = new AgendaDAO();
		ConsultaDAO consultaDAO = new ConsultaDAO();
		MedicamentoDAO medicamentoDAO = new MedicamentoDAO();
		
		Agenda agenda = new Agenda();
		Paciente paciente = new Paciente();
		Medico medico = new Medico();
		Consulta consulta = new Consulta();
		String acao = request.getParameter("acao");
		
		List<Paciente> pacientes = new Vector<Paciente>();
		List<Medico> medicos = new Vector<Medico>();
		List<Medicamento> medicamentos = new Vector<Medicamento>();
		
		medicos = medicoDAO.findAll();
		request.setAttribute("medicos", medicos);
		
		if(acao.equals("FormConsulta")){
			String id = request.getParameter("idpaciente");
			
			paciente = pacienteDAO.findPacienteById(id);
			request.setAttribute("paciente", paciente);
			
			
			RequestDispatcher rd = request.getRequestDispatcher("app/FormCadConsulta.jsp");
			rd.forward(request, response);
		}else if(acao.equals("Agendar")){
			
			request.setAttribute("pacientes", pacientes);
			
			RequestDispatcher rd = request.getRequestDispatcher("app/FormAgenda.jsp");
			rd.forward(request, response);			
		}else if(acao.equals("Alterar")){
			String consultaId = request.getParameter("idconsulta");
			consulta = consultaDAO.findConsultaById(consultaId);
			medicamentos = medicamentoDAO.findAll();
			System.out.println("CONSULTA"+consulta.toString());
			request.setAttribute("medicamentos", medicamentos);
			request.setAttribute("consulta", consulta);
			
			
			RequestDispatcher rd = request.getRequestDispatcher("app/FormEditConsulta.jsp");
			rd.forward(request, response);			
		}else if(acao.equals("Buscar")){
			String nomePaciente = request.getParameter("nomepaciente");
			pacientes = pacienteDAO.findPacientesByNome(nomePaciente);
			System.out.println(pacientes.toString());
			request.setAttribute("pacientes", pacientes);
			RequestDispatcher rd = request.getRequestDispatcher("app/BuscarPacientes.jsp");
			rd.forward(request, response);			
		}else if(acao.equals("BuscarAgenda")){
			
			RequestDispatcher rd = request.getRequestDispatcher("app/FormBuscarAgenda.jsp");
			rd.forward(request, response);
			
		}else if(acao.equals("ExibirAgenda")){
			String dataAgenda = request.getParameter("dataagenda");
			String medicoId = request.getParameter("medico");
			medico = medicoDAO.findMedicoByid(medicoId);
			Date data;
			Calendar cal = Calendar.getInstance();
			try {
				data = new Date(formatador.parse(dataAgenda).getTime());
				cal.setTime(data);
				//agenda = agendaDAO.findAgendaByMedicoData(medico, data);
				request.setAttribute("agenda", agenda);
				
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				
				RequestDispatcher rd = request.getRequestDispatcher("app/TabelaAgenda.jsp");
				rd.forward(request, response);
			}
			
		}
		else if(acao.equals("")){
			pacientes.add(null);
			request.setAttribute("pacientes", pacientes);
			RequestDispatcher rd = request.getRequestDispatcher("app/BuscarPacientes.jsp");
			rd.forward(request, response);
			
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings({ "null", "unused" })
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Paciente paciente = new Paciente();
		Medico medico = new Medico();
		Consulta consulta = new Consulta();
		Agenda agenda = new Agenda();

		PacienteDAO pacienteDAO = new PacienteDAO();
		MedicoDAO medicoDAO = new MedicoDAO();
		ConsultaDAO consultaDAO = new ConsultaDAO();
		AgendaDAO agendaDAO = new AgendaDAO();
		MedicamentoDAO medicamentoDAO = new MedicamentoDAO();
		
		List<Medico> medicos = new ArrayList<Medico>();
		
		String acao = request.getParameter("acao");
		String pacienteId =  request.getParameter("idpaciente");
		String medicoId = request.getParameter("medico");
		String dataConsulta = request.getParameter("dataconsulta");
		String situacao = request.getParameter("situacao");
		
		medicos = medicoDAO.findAll();
		request.setAttribute("medicos", medicos);
		
		if(acao.equals("Cadastrar")){
			medico = medicoDAO.findMedicoByid(medicoId);
			paciente = pacienteDAO.findPacienteById(pacienteId);

			try {
				
				consulta.setPaciente(paciente);
				consulta.setSituacao(situacao);
				Date data;
				Calendar cal = Calendar.getInstance();
				data = new Date(formatador.parse(dataConsulta).getTime());
				cal.setTime(data);
				//agenda = agendaDAO.findAgendaByMedicoData(medico, data);
				
				if(agenda == null){
					agenda = new Agenda();
					agenda.addConsultas(consulta);
					agenda.setDataAgendamento(cal);
					agenda.setMedico(medico);
					
				}else{
					agenda.addConsultas(consulta);
					agenda.setDataAgendamento(cal);
					agenda.setMedico(medico);	
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}finally{
				agendaDAO.begin();
				agendaDAO.flush();
				agendaDAO.merge(agenda);
				agendaDAO.commit();
				agendaDAO.close();
				
				request.setAttribute("agenda",agenda);
				RequestDispatcher rd = request.getRequestDispatcher("app/TabelaAgenda.jsp");
				rd.forward(request, response);
			}
		}else if(acao.equals("Alterar")){
			String receita = request.getParameter("receita");
			situacao = request.getParameter("situacao");
			String[] medicamentos = request.getParameterValues("medicamentos");
			String consultaId = request.getParameter("idconsulta");
			
			Receituario receituario = new Receituario();
			receituario.setDescriminacao(receita);
			
			if(medicamentos!=null){
				Medicamento medicamento = new Medicamento();
				for(String s:medicamentos){
					medicamento = medicamentoDAO.findMedicamentoById(s);
					receituario.addMedicamento(medicamento);
				}
			}
			consulta = consultaDAO.findConsultaById(consultaId);
		
			consulta.setReceituario(receituario);
			consulta.setSituacao(situacao);
			consultaDAO.begin();
			consultaDAO.flush();
			consultaDAO.merge(consulta);
			consultaDAO.commit();
			consultaDAO.close();
			RequestDispatcher rd = request.getRequestDispatcher("app/FormBuscarAgenda.jsp");
			rd.forward(request, response);			
		}
	}

}
